lexer grammar XMLLexer;

options {
  language = Java;
}


@header {package PL.practica8;}

@members {
  boolean identificador = false;
  boolean dentroEtiqueta = false;
  
  
  ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

  public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

public ArrayList getListaErrores(){return errores;}


@Override
public void reportError (RecognitionException e){
  System.err.println (getErrorMessage(e, getTokenNames()));
  errores.add(e);
}
  
}


  fragment NUEVA_LINEA: '\r\n';
  fragment DIGITO: '0'..'9';
  fragment CHAR: 'A'..'Z' | 'a'..'z' | '_' | '/' | '&' | ';' | '.';
  fragment PARAM: { dentroEtiqueta && identificador }? CHAR+;
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  COMENTARIO: '<!--' (options {greedy=false;}:.)* '-->' {skip();};
  IGUAL : '=';
  CADENA :  '"' (options {greedy=false;} : .)* '"';
  ABRIRANGULO : '<' {dentroEtiqueta=true;};
  CERRARANGULO :'>'  {dentroEtiqueta=false; identificador = false;};
  ANGULOSLASH : '</' {dentroEtiqueta=true;};
  NUMERO: (DIGITO)+('.'(DIGITO)+)?;
  OPERADOR: '+'|'-'|'/'|'*';
  PARENTESIS: '('|')';
  SEPARADOR: ';';
  SIMBOLOS : '&'|'.';
  ID : {dentroEtiqueta && !identificador }? CHAR+ { identificador = true; };
  VALOR : {!dentroEtiqueta}?  CHAR+;
  ATRIBUTO:  PARAM '=' CADENA;
  
  
